home *** CD-ROM | disk | FTP | other *** search
/ Qoole for Quake / Qoole for Quake (USA) / Qoole for Quake (USA).bin / Tutorial / HTML / QUBE.ZIP / SRC / MATHLIB.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-11-05  |  1.7 KB  |  108 lines

  1. /* mathlib.c -- math primitives */
  2.  
  3. #include "cmdlib.h"
  4. #include "mathlib.h"
  5.  
  6. vec3_t vec3_origin = {0,0,0};
  7.  
  8.  
  9. double VectorLength(vec3_t v)
  10. {
  11.     int        i;
  12.     double    length;
  13.     
  14.     length = 0;
  15.     for (i=0 ; i< 3 ; i++)
  16.         length += v[i]*v[i];
  17.     length = sqrt (length);        /* FIXME */
  18.  
  19.     return length;
  20. }
  21.  
  22. qboolean VectorCompare (vec3_t v1, vec3_t v2)
  23. {
  24.     int        i;
  25.     
  26.     for (i=0 ; i<3 ; i++)
  27.         if (fabs(v1[i]-v2[i]) > EQUAL_EPSILON)
  28.             return false;
  29.             
  30.     return true;
  31. }
  32.  
  33. vec_t Q_rint (vec_t in)
  34. {
  35.     return floor (in + 0.5);
  36. }
  37.  
  38. void VectorMA (vec3_t va, double scale, vec3_t vb, vec3_t vc)
  39. {
  40.     vc[0] = va[0] + scale*vb[0];
  41.     vc[1] = va[1] + scale*vb[1];
  42.     vc[2] = va[2] + scale*vb[2];
  43. }
  44.  
  45. void CrossProduct (vec3_t v1, vec3_t v2, vec3_t cross)
  46. {
  47.     cross[0] = v1[1]*v2[2] - v1[2]*v2[1];
  48.     cross[1] = v1[2]*v2[0] - v1[0]*v2[2];
  49.     cross[2] = v1[0]*v2[1] - v1[1]*v2[0];
  50. }
  51.  
  52. vec_t _DotProduct (vec3_t v1, vec3_t v2)
  53. {
  54.     return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2];
  55. }
  56.  
  57. void _VectorSubtract (vec3_t va, vec3_t vb, vec3_t out)
  58. {
  59.     out[0] = va[0]-vb[0];
  60.     out[1] = va[1]-vb[1];
  61.     out[2] = va[2]-vb[2];
  62. }
  63.  
  64. void _VectorAdd (vec3_t va, vec3_t vb, vec3_t out)
  65. {
  66.     out[0] = va[0]+vb[0];
  67.     out[1] = va[1]+vb[1];
  68.     out[2] = va[2]+vb[2];
  69. }
  70.  
  71. void _VectorCopy (vec3_t in, vec3_t out)
  72. {
  73.     out[0] = in[0];
  74.     out[1] = in[1];
  75.     out[2] = in[2];
  76. }
  77.  
  78. void VectorNormalize (vec3_t v)
  79. {
  80.     int        i;
  81.     double    length;
  82.     
  83.     length = 0;
  84.     for (i=0 ; i< 3 ; i++)
  85.         length += v[i]*v[i];
  86.     length = sqrt (length);
  87.     if (length == 0)
  88.         return;
  89.         
  90.     for (i=0 ; i< 3 ; i++)
  91.         v[i] /= length;    
  92. }
  93.  
  94. void VectorInverse (vec3_t v)
  95. {
  96.     v[0] = -v[0];
  97.     v[1] = -v[1];
  98.     v[2] = -v[2];
  99. }
  100.  
  101. void VectorScale (vec3_t v, vec_t scale, vec3_t out)
  102. {
  103.     out[0] = v[0] * scale;
  104.     out[1] = v[1] * scale;
  105.     out[2] = v[2] * scale;
  106. }
  107.  
  108.